const jwt = require('jsonwebtoken')
const UserModel = require('../db/models/UserModel')
const secretOrPrivateKey = 'suibian'//秘钥  可以配置到环境变量 比如package.json中 读取过来
// 验证身份 中间件,获取headers中的token , 解析后 判断是否有权限
const role = async (req, res, next) => {
    if (!req.headers.authorization) {
        return res.status(409).send({ code: 409, msg: '没有接收到token' })
    }

    const token = req.headers.authorization.split('Bearer ').pop()//得到请求头中的 token 

    // 解析token 返回生成token之前传入的payload混淆参数 
    const tokenVerify = await jwt.verify(token, secretOrPrivateKey, function (err, decoded) {
        if (err) {
            return res.status(409).send({ msg: 'token被篡改了' })// 如果报错 则表明 有人在外面篡改了token
        } else {
            return decoded//否则返回 payload 例如{_id: '6044e7c9a4c39c3ba4ff0e4b',username: 'admin',iat: 1615129428,exp: 1615215828}
        }
    })

    const { _id, username } = tokenVerify//解构赋值拿到id,username
    const user = await UserModel.findById(_id)// 查询用户是否存在
    if (!user) {//判断用户是否已存在
        return res.status(422).send(`${username}该用户不存在,请注册`)
    }
    if (username != user.username) {//防止有人在外面改掉token中的用户名
        return res.status(422).send(`${username}该用户不存在,请注册`)
    } else {
        // 如果用户存在,则判断权限
        // if (user.role == 0) {
        //     res.status(409).send('没有权限')
        // } else if (user.role == 1) {
        //     next()
        // }

        // 设置用户权限
        req.role=user.role
        next()
    }
}

module.exports=role